home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / apps / 671 / doc / tricks.doc < prev   
Text File  |  1992-09-20  |  15KB  |  430 lines

  1.  
  2.               ===============================================
  3.  
  4.  
  5. @(#)            OKAMI SHELL VERSION 1.5 - TIPS UND TRICKS
  6.  
  7.  
  8.               ===============================================
  9.                              Stand: 19.9.1992
  10.  
  11.  
  12.  
  13.  
  14.         BITTE ERST DIE DATEIEN README UND OKAMI.DOC LESEN!
  15.  
  16. ----------------------------------------------------------------------------
  17.  
  18.  
  19.  
  20. INHALT
  21.  
  22.  
  23.         Profile
  24.         Aufruf von Programmen
  25.         Benutzung der Shell von Diskette aus
  26.         Beispiel-Shellscripts
  27.                 okback.sh
  28.                 e.sh
  29.                 showpic.sh
  30.                 startprg.sh
  31.         Shell-Funktionen
  32.         Die gemexec-Funktion
  33.         Die screensave-Funktion
  34.         Speichern und Restaurieren der Shell-Einstellungen
  35.         MS-DOS-Gefühle
  36.         C-Shell-Gefühle
  37.         Andere Shells: Gulam, Master und bash
  38.         Die Versionsnummer der Shell
  39.         Diverses
  40.                 Trikolor-Bildschirm
  41.                 Aufruf vom Desktop
  42.                 Uneindeutige Kommandonamen
  43.                 Compiler-Aufruf
  44.                 Ändern von Dateinamen-Extendern
  45.                 Programmierung des UPN-Rechners
  46.  
  47. ----------------------------------------------------------------------------
  48.  
  49.  
  50.  
  51. PROFILE
  52.  
  53. Ich benutze das folgende Profile zum Konfigurieren der Shell. 
  54.  
  55.         # Okami-Shell - System-Profile
  56.  
  57.  
  58.         # Terminaleinstellung (für Termcap etc.)
  59.         TERM=st
  60.         # Cursor etwas schneller blinkend
  61.         cursor +bv 12
  62.         # Aktuelles Directory im Prompt anzeigen
  63.         PS1=['$CWD'] ^^^$'  '
  64.         # Pipes auf die Ramdisk
  65.         PIPDIR=M:\
  66.         # Nach Ende der Shell CWD sichern...
  67.         set +s
  68.         # ...und den Cursor abschalten
  69.         trap cursor -v
  70.         # Directories trennen wie in Unix mit Slash
  71.         set +b
  72.         # anmelden als Applikation, sollte man immer machen
  73.         gon
  74.         # Word Wrap On
  75.         echo ^033v
  76.  
  77.  
  78.         # Bidschirm löschen durch viele Leerzeilen
  79.         echo "^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n^n"
  80.  
  81.  
  82.         # Einschaltmeldung
  83.         echo
  84.         echo Atari Mega-ST 4 ($TERM)
  85.         # Versionsnummer der Shell, des TOS und von MiNT
  86.         ver -otM
  87.         echo
  88.         # Ausgabe des Datums des letzten Logins
  89.         cat lastlog 2>NULL:
  90.         echo
  91.         # Ausgabe des freien Speichers
  92.         echo Free RAM: `mem` Bytes
  93.         echo
  94.         # Ausgabe in invertierter Schrift
  95.         echo ^033pType help for command survey.^033q
  96.         echo
  97.         # Datum speichern
  98.         echo Last Login: `date` >lastlog
  99.         # Letztes CWD zurückholen
  100.         cd `cat wdir`
  101.  
  102.  
  103. Laufwerk M ist eine Ramdisk,  die die Aufgabe hat,  die Pipe-Operationen
  104. zu  beschleunigen.   Dadurch,   daß die Pipe auf die Ramdisk gelegt wird
  105. (PIPDIR=M:\), erfolgen alle Pipe-Operationen ohne Plattenzugriff. 
  106. Durch  die Einstellung "set +s"  wird die Shell veranlaßt,  vor dem Pro-
  107. grammende das aktuelle Verzeichnis in die Datei $HOME\wdir zu schreiben.
  108. Das Profile benutzt diese Datei,  um das aktuelle Verzeichnis wieder auf
  109. den  alten Wert einzustellen.  So ist man nach dem Start der Shell immer
  110. in dem Verzeichnis,  in dem man war, als man die Shell zuletzt verlassen
  111. hatte. 
  112.  
  113. Durch die Einstellung "set +x"  werden in einer Eingabe alle Slashes (/)
  114. in  Backslashes  (\)   umgeformt,   wodurch  man  die  Möglichkeit  hat,
  115. Dateinamen  wie  in  Unix  einzugeben,   also  shell/bin/sh.ttp  anstatt
  116. shell\bin\sh.ttp. Natürlich erzeugt dann das Kommando 
  117.                               echo 6/3=2 
  118. die Ausgabe 
  119.                                  6\3=2 
  120. ,  da alle Slashes umgeformt werden, aber das stört normalerweise nicht.
  121. (den UPN-Rechner stört es übrigens auch nicht,  da er den Backslash als-
  122. Divisionszeichen versteht. Aus "upn 6 3 /" wird also "upn 6 3 \".) 
  123. Außerdem  kann  man  sich  in  Notfällen mit einfachen Anführungszeichen
  124. retten, 
  125.                              echo '6/3=2' 
  126. ergibt also immer 
  127.                                  6/3=2 
  128.  
  129. ----------------------------------------------------------------------------
  130.  
  131.  
  132.  
  133. AUFRUF VON PROGRAMMEN
  134.  
  135. (Der  folgende Abschnitt ist im wesentlichen für Festplattenbenutzer von
  136. Interesse.) 
  137.  
  138. Viele Programme gehen davon aus,  das sich gewisse Dateien wie z.B. RSCs
  139. im  aktuellen Verzeichnis befinden.  Um ein solches Kommando zu starten,
  140. muß  man  also  mit cd in das jeweilige Verzeichnis wechseln,  was unter
  141. Umständen einige Tipparbeit macht,  vor allem bei einer Festplatte.  Mit
  142. der  Okami-Shell ist es möglich,  Programme von überall,  also von jedem
  143. beliebigen aktuellen Verzeichnis aus zu starten. 
  144. Es   sei   z.B.   GEMTEST.PRG   ein   Programm,   das   im   Verzeichnis
  145. D:\PROG\GEMTEST  steht  und eine RSC-Datei aus dem aktuellen Verzeichnis
  146. nachladen muß. 
  147. Zum Start des Programms müßte man also eingeben 
  148.  
  149.         cd d:\prog\gemtest
  150.         gemtest
  151.  
  152. Man kann allerdings auch so vorgehen: 
  153.  
  154. Man  erzeugt sich eine Datei namens GEMTEST.SH im Verzeichnis $HOME\bin,
  155. die ungefähr so aussieht: 
  156.  
  157.         A=`set -`
  158.         set +x
  159.         d:\prog\gemtest.prg
  160.         set $A
  161.         unset A
  162.  
  163. Zuerst  wird  die aktuelle Einstellung der Flags in der Shellvariablen A
  164. gespeichert,  danach  wird  das  Flag  x  aktiviert.  Wenn  dieses  Flag
  165. aktiviert ist, führt die Shell vor dem Start eines Binärprogramms ein cd
  166. in das Directory aus,  in dem sich das Programm befindet.  Nach dem Ende
  167. des Programms wird das ursprüngliche Directory wieder restauriert. 
  168. Danach wird das Programm gestartet. 
  169. Nach  Programmende  werden  die Shell-Flags werden auf den gespeicherten
  170. Wert  zurückgesetzt.   Danach  wird die lokal verwendete Shellvariable A
  171. freigegeben. 
  172.  
  173. Wenn das Flag -x immer gesetzt ist,  kann man denselben Effekt erreichen
  174. durch: 
  175.  
  176.                 hash gemtest d:/prg/gemtest/gemtest.prg 
  177.  
  178. Normalerweise  ist  das Flag x immer aktiviert.  Programme,  die sich in
  179. einem der in der Shellvariablen PATH gespeicherten Directories befinden,
  180. werden also immer korrekt gestartet, indem man nur ihren Namen eingibt. 
  181.  
  182. ----------------------------------------------------------------------------
  183.  
  184.  
  185.  
  186. BENUTZUNG DER SHELL VON DISKETTE AUS
  187.  
  188. Wenn  möglich,   sollte  man die Shell auf einem schnellen Massespeicher
  189. wie  Festplatte  oder Ramdisk installieren.  Wer die Shell hauptsächlich
  190. mit Disketten benutzt,  ärgert sich vermutlich darüber,  daß es ziemlich
  191. lange  dauert,  bis ein falsch eingetipptes Kommando als solches erkannt
  192. wird,   da  die  Shell  in allen möglichen Ordnern auf der Diskette nach
  193. einer passenden Datei sucht.  Mit den folgenden Einstellungen im Profile
  194. kann die An- zahl dieser Suchoperationen minimiert werden: 
  195.  
  196.         PATH=.,$HOME\bin
  197.         CDPATH=.
  198.  
  199. Wenn  man  den Programm-Suchpfad auf das aktuelle Directory abkürzt (mit
  200. der   Einstellung   "PATH=."),    werden  noch  weniger  Suchoperationen
  201. durchgeführt,  man kann dann allerdings die mitgelieferten externen Kom-
  202. mandos,   die  sich  in dem Directory $HOME\bin befinden sollten,  nicht
  203. mehr von überallher durch den einfachen Kommandonamen aufrufen,  sondern
  204. muß  den  ganzen  Pfad  angeben  (z.B.  nicht einfach "format",  sondern
  205. "$HOME\bin\format.ttp"). 
  206.  
  207. ----------------------------------------------------------------------------
  208.  
  209.  
  210.  
  211. BEISPIEL-SHELLSCRIPTS
  212.  
  213.  
  214.  
  215. 1) okback.sh
  216. Ich  benutze  das  folgende Shellscript zum Sichern der Quelldateien der
  217. Shell auf Diskette. Es wird ein lzh-Archiv auf der Diskette angelegt, in
  218. das  die  seit  dem  letzten Backup geänderten Dateien hineingeschrieben
  219. werden. 
  220.  
  221.         # Temporär-Directory
  222.         DIR=M:/tmp/okbak
  223.         # Liste der zu sichernden Dateien
  224.         FILES=*.c *.h sh.prj doc/*.nr
  225.  
  226.  
  227.         alert stop 1 "Bitte die Okami-Backup-^|Diskette einlegen."      ^
  228.                 "Ok^|Abbruch" ERG
  229.         if [ $ERG = 2 ]
  230.         then
  231.           exit
  232.         fi
  233.  
  234.  
  235.         # Temp-Dir anlegen und Archiv von der Diskette hineinkopieren
  236.         mkdir -r $DIR/
  237.         cp -v a:/okbak.lzh $DIR
  238.  
  239.  
  240.         # geänderte Dateien ins Archiv einfügen.
  241.         # lharc ist ein externes Kommando.
  242.         lharc a -by $DIR/okbak.lzh $FILES
  243.  
  244.  
  245.         # Archiv wieder auf Diskette speichern
  246.         cp -v $DIR/okbak.lzh a:/
  247.         # Log-Eintrag auf der Diskette erzeugen
  248.         echo Okami-Source-Backup vom `date` >>a:/okbak.log
  249.  
  250.  
  251.         # Temp-Directory entfernen
  252.         rm -r $DIR
  253.         unset DIR FILES ERG
  254.  
  255.  
  256.  
  257. 2) e.sh
  258. Das  Shellscript  e.sh dient zum Aufruf des Editors.  Das Editorprogramm
  259. befindet  sich  in der Datei $HOME\bin\editor.prg.  Durch die Verwendung
  260. dieses  Shellscripts ist es möglich,  irgendwo im Dateisystem den Editor
  261. für irgendeine Datei aufzurufen. 
  262.  
  263.         FILE=$*
  264.         if [ -v FILE ]
  265.         then
  266.           FILE=$EFILE
  267.         fi
  268.         FILE=`fullname $FILE`
  269.         $HOME/bin/editor.prg $FILE
  270.         EFILE=$FILE
  271.         unset FILE
  272.  
  273. Der  Name  der  zu  editerenden  Datei  wird  dem  Script  als Parameter
  274. übergeben. 
  275. Die  Zeile  "FILE=`fullname  $FILE`"   erzeugt in der Variablen FILE den
  276. absoluten  Dateinamen,   der  dem Editorprogramm als Parameter übergeben
  277. wird. 
  278.  
  279. Wenn  dieses  Script ohne Parameter aufgerufen wird,  so wird der in der
  280. Shellvariablen EFILE gespeicherte Dateiname benutzt. In dieser Variablen
  281. wird nach jedem Editoraufruf der jeweilige Dateiname gespeichert, so daß
  282. man,   wenn man dieselbe Datei mehrmals hintereinander editieren möchte,
  283. den Dateinamen nur einmal angeben muß: 
  284.  
  285.         e datei.txt                     editieren von datei.txt
  286.         e datei2.txt                    editieren von datei2.txt
  287.         e                               ebenfalls datei2.txt
  288.  
  289. Ggfs.   muß  man  dieses  Script  noch erweitern,  um dem Editor mehrere
  290. Parameter  zu  übergeben  (für  den  Micro-Emacs  z.B.   den  Namen  der
  291. Konfigurationsdatei o.ä.). 
  292.  
  293.  
  294. 3) showpic.sh
  295. Dieses  Script  zeigt,   wie man die Shell programmieren kann.  Es dient
  296. dazu,  Bilddateien,  die  im  Bitmap-Screenformat  abgespeichert  wurden
  297. (Dateilänge  >32000  Bytes),   zu  laden  und anzuzeigen.  Es gehört zum
  298. Lieferumfang  der  Shell,   die  Bedienungsanleitung  befindet  sich  in
  299. commands.doc. 
  300.  
  301.  
  302. 4) startprg.sh
  303. Die  Idee zu diesem Shellscript stammt von Thomas Behrens aus Eschweiler
  304. und lautet,  ein Programm in einer Fileselectbox auszuwählen und dann zu
  305. starten. Dazu genügt eigentlich die folgende Zeile: 
  306.  
  307.                             fsel | xargs {} 
  308.  
  309. oder noch einfacher 
  310.  
  311.                                 `fsel` 
  312.  
  313. ,   wenn  man  aber den Abbruch-Button der Box abtesten und dem Programm
  314. eine   Parameterzeile  übergeben  will,   sollte  man  folgendes  Script
  315. benutzen: 
  316.  
  317.         FILE=`fsel *.* "" KEY "Welches Programm ausführen?"`
  318.         if [ $KEY = 1 ]
  319.         then
  320.           echo "Bitte Kommandozeile eingeben:"
  321.           read CMD
  322.           $FILE $CMD
  323.         fi
  324.         unset FILE KEY CMD
  325.  
  326. Beide  Lösungen  funktionieren  übrigens  sowohl mit Binärprogrammen als
  327. auch mit Shellscripts. 
  328.  
  329. ---------------------------------------------------------------------------
  330.  
  331.  
  332.  
  333. SHELL-FUNKTIONEN
  334.  
  335. Natürlich  sollte  man  alle  häufig  gebrauchten  Shellscripts resident
  336. halten, und zwar als Shellfunktionen. Es ist möglich, ein Shellscript so
  337. zu  schreiben,   daß  es  sich  beim  ersten  Aufruf selber als Funktion
  338. installiert; bei allen weiteren Aufrufen wird dann die Funktion benutzt.
  339.  
  340.  
  341. Sei  z.B.   folgendes Shellscript in der Datei hallo.sh,  also unter dem
  342. Namen hallo aufzurufen: 
  343.  
  344.         echo Hallo Anwender!
  345.         echo Der freie Speicherplatz beträgt `mem` Bytes.
  346.         echo Auf Platte C: sind `df -f c:` Bytes frei.
  347.  
  348. Setzt man nun die Zeilen 
  349.         hallo()
  350.         {
  351. an den Beginn und die Zeilen 
  352.         }
  353.         hallo
  354. an das Ende dieses Scripts, also so: 
  355.  
  356.         hallo()
  357.         {
  358.           echo Hallo Anwender!
  359.           echo Der freie Speicherplatz beträgt `mem` Bytes.
  360.           echo Auf Platte C: sind `df -f c:` Bytes frei.
  361.         }
  362.         hallo
  363.  
  364. ,   so  wird beim Start des Scripts die Shellfunktion hallo installiert,
  365. und  bei jedem weiteren Aufruf von hallo wird nicht das Script,  sondern
  366. die Funktion aufgerufen. Mit dem Kommando 
  367.  
  368.                               unset hallo 
  369.  
  370. kann man die Funktion wieder aus dem Speicher entfernen. 
  371.  
  372. Die   Shellfunktionen   machen   übrigens   eine  alias-Funktion  völlig
  373. überflüssig,   da  sie auch benutzt werden können,  um interne Kommandos
  374. umzudefinieren: Wer anstelle von ls lieber ls -C hat, gibt einfach ein 
  375.  
  376.         ls()
  377.         {
  378.           !ls -C $*
  379.         }
  380.  
  381. Das Ausrufezeichen verhindert,  daß sich die ls-Funktion selber aufruft.
  382. !ls  ist  immer  das interne Kommando ls.  Wer irgendwann das normale ls
  383. benutzen will, kann das tun, indem er es als !ls aufruft. 
  384.  
  385. Ebenso helfen Shellfunktionen,  Tippfehler zu vermeiden; wer ständig dor
  386. oder dior statt dir tippt, versuche 
  387.  
  388.         dior()
  389.         {
  390.           dir $*
  391.         }
  392.  
  393. (Wer sich wundert,  daß die Okami-Shell trotzdem ein alias-Kommando hat:
  394. das  dient  nur  dazu,   das Anlegen dieser Mini-Funktionen einfacher zu
  395. gestalten  und  um Shellscripts anderer Shells ausführen zu können.  Man
  396. kann also ebenso schreiben: 
  397.                             alias ls !ls -C 
  398. und 
  399.                             alias dior dir 
  400. .) 
  401.  
  402. Mein  Unix-Tippfehler-Script  enthält  mehrere Dutzend Schreibweisen der
  403. häufig  benutzten  Kommandos  wie dir,  grep und der Make-Aufrufe xmake,
  404. qmake und remake. 
  405.  
  406. Besondere   Funktionen  haben  die  vordefinierten  (aber  vom  Anwender
  407. vollständig umdefinierbaren) Shellfunktionen gemexec und screensave, die
  408. in den folgenden Abschnitten beschrieben werden. 
  409.  
  410. ---------------------------------------------------------------------------
  411.  
  412.  
  413.  
  414. DIE GEMEXEC-FUNKTION
  415.  
  416. Mit  der  kann  man wirklich einiges machen,  denn sie gibt dem Anwender
  417. die  Möglichkeit,  das Verhalten der Shell beim Start von GEM-Programmen
  418. frei   zu   programmieren.    Dabei   stehen   ihm  alle  die  nicht  zu
  419. unterschätzenden Funktionen der Shell zur Verfügung. 
  420.  
  421. Die  folgende  gemexec-Funktion  kann  benutzt werden,  um nach dem Ende
  422. eines  GEM-Programms  den Bildschirm wieder so herzustellen,  wie er vor
  423. dem Aufruf war. 
  424. Dazu   werden  die  internen  Kommandos  getscr  und  putscr  sowie  die
  425. VT52-Sequenzen  zum  Speichern  und  Wiederherstellen der Cursorposition
  426. benutzt.    Dabei  werden  allerdings  32000  Bytes  zum  Speichern  des
  427. Bildschirminhaltes  belegt.  Aus diesem Grund speichert die Funktion den
  428. Bildschirm  nur  dann,  wenn die Shellvariable SAVESCR gesetzt ist.  Man
  429. kann das Spei